Detection of a physical collision between two client devices in a location sharing system

ABSTRACT

The invention provides methods, systems, and devices for detecting a physical collision between two client devices based on sensor data. A server computer receives a first collision signature from a first client device, and a second collision signature from a second client device. Based on determining that a correlation of the first collision signature and the second collision signature does not achieve a detection threshold, the server computer lowers, for a limited period of time, the detection threshold. If the server computer receives, within the limited period of time, a third collision signature from the first client device, and a fourth collision signature from the second client device, and determines that a correlation of the third collision signature and the fourth collision signature achieves the lowered detection threshold, the server computer detects a collision between the first and second client devices.

CLAIM OF PRIORITY

This application is a continuation of U.S. patent application Ser. No.16/434,547, filed on Jun. 7, 2019, which is incorporated herein byreference in its entirety.

BACKGROUND

The popularity of electronic messaging, particularly instant messaging,continues to grow. Users increasingly share media content items such aselectronic images and videos with each other, reflecting a global demandto communicate more visually. Similarly, users increasingly seek tocustomize the media content items they share with others, providingchallenges to social networking systems seeking to generate custom mediacontent for their members. Embodiments of the present disclosure addressthese and other issues.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

To easily identify the discussion of any particular element or act, themost significant digit or digits in a reference number refer to thefigure number in which that element is first introduced.

FIG. 1 is a diagrammatic representation of a networked environment inwhich the present disclosure may be deployed, in accordance with someexample embodiments.

FIG. 2 illustrates a messaging system in accordance with some exampleembodiments.

FIG. 3 is a diagrammatic representation of a data structure asmaintained in a database, in accordance with some example embodiments.

FIG. 4 is a diagrammatic representation of a processing environment, inaccordance with some example embodiments.

FIG. 5 is a flowchart for an access-limiting process, in accordance withsome example embodiments.

FIG. 6 is block diagram showing a software architecture within which thepresent disclosure may be implemented, in accordance with some exampleembodiments.

FIG. 7 is a diagrammatic representation of a machine, in the form of acomputer system within which a set of instructions may be executed forcausing the machine to perform any one or more of the methodologiesdiscussed, in accordance with some example embodiments.

FIG. 8 illustrates a method in accordance with one embodiment.

FIG. 9 illustrates a method in accordance with one embodiment.

FIG. 10 illustrates a method in accordance with one embodiment.

FIG. 11 illustrates a method in accordance with one embodiment.

FIG. 12 illustrates a method in accordance with one embodiment.

FIG. 13 illustrates a user interface in accordance with one embodiment.

DETAILED DESCRIPTION

Embodiments of the present disclosure provide a method for detecting aphysical collision between two client devices based on sensor data. Whentwo users tap or knock their phones together, each phone detects acollision, and sends, to the application server, a collision signatureincluding a variety of sensor data which includes a timestamp, alocation of the phone, and acceleration data acquired by anaccelerometer embedded in the phone. The server computer correlates allthe collision signatures received to identify two collision signaturesthat correspond to a same physical collision. Based on identifying twocollision signatures corresponding to a same physical collision, theserver computer determines that the two phones have been taped orknocked together. Because of the limited accuracy of the location andaccelerometer data acquired by the phones, false positives (improperdetection of a collision in the absence of a collision), and falsenegatives (missed detection of a collision) are frequent.

Motivated by these challenges, some embodiments of the presentdisclosure provide improvements in the operation of a collisiondetection system by reducing errors and therefore improving thecollision detection system by more accurately detecting a collisionbetween two client devices. In some embodiments, some of theseimprovements are achieved by setting a low detection threshold, andtemporarily increasing the detection threshold of two client devices inresponse to receiving a collision signature from each of the two clientdevices and determining that the two collision signatures do not quiteachieve the detection threshold.

In an example scenario, two users tap their phones together a firsttime. Each of the two phones generates and sends a collision signatureto the server. The server correlates the two collision signatures anddetermines that the correlation of the two collision signatures does notachieve the detection threshold. In response to determining that thecorrelation of the two collision signatures does not achieve thedetection threshold, the server lowers the detection threshold for alimited time. Upon noticing that the collision has not been detected,the two users tap their phones together a second time. Each of the twophones generates and sends another collision signature to the server.This time, because the detection threshold is temporarily lowered, thecorrelation of the two collision signatures is more likely to achievethe detection threshold. As such, even if the server does not detect thefirst collision, the server is more likely to detect the secondcollision, thereby reducing the global false negative rate. Meanwhile,because the probability of detecting two false positives in a shortamount of time is low, the global false positive rate is notsignificantly increased.

For example, in some embodiments, a server computer receiving a firstcollision signature from a first client device, and a second collisionsignature from a second client device. Based on determining that acorrelation of the first collision signature and the second collisionsignature does not achieve a detection threshold, the server computerlowers, for a limited period of time, the detection threshold. Withinthe limited period of time, the server computer receives a thirdcollision signature from the first client device, and a fourth collisionsignature from the second client device. In response to determining thata correlation of the third collision signature and the fourth collisionsignature achieves the lowered detection threshold, the server computerdetects a collision between the first and second client devices.

The description that follows includes systems, methods, techniques,instruction sequences, and computing machine program products thatembody illustrative embodiments of the disclosure. In the followingdescription, for the purposes of explanation, numerous specific detailsare set forth in order to provide an understanding of variousembodiments of the inventive subject matter. It will be evident,however, to those skilled in the art, that embodiments of the inventivesubject matter may be practiced without these specific details. Ingeneral, well-known instruction instances, protocols, structures, andtechniques are not necessarily shown in detail.

FIG. 1 is a block diagram showing an example location sharing system 100for exchanging location data over a network. The location sharing system100 includes multiple instances of a client device 102, each of whichhosts a number of applications including a location sharing clientapplication 104. Each location sharing client application 104 iscommunicatively coupled to other instances of the location sharingclient application 104 and a location sharing server system 108 via anetwork 106 (e.g., the Internet). In particular, in some cases, theclient device 102 accesses the network 106 via a cellular base station128, which is a relay located at the center of a cell of a cellularnetwork.

A location sharing client application 104 is able to communicate andexchange data with another location sharing client application 104 andwith the location sharing server system 108 via the network 106. Thedata exchanged between location sharing client application 104, andbetween a location sharing client application 104 and the locationsharing server system 108, includes functions (e.g., commands to invokefunctions) as well as payload data (e.g., location data, text, audio,video or other multimedia data).

The location sharing server system 108 provides server-sidefunctionality via the network 106 to a particular location sharingclient application 104. While certain functions of the location sharingsystem 100 are described herein as being performed by either a locationsharing client application 104 or by the location sharing server system108, the location of certain functionality either within the locationsharing client application 104 or the location sharing server system 108is a design choice. For example, it may be technically preferable toinitially deploy certain technology and functionality within thelocation sharing server system 108, but to later migrate this technologyand functionality to the location sharing client application 104 where aclient device 102 has a sufficient processing capacity.

The location sharing server system 108 supports various services andoperations that are provided to the location sharing client application104. Such operations include transmitting data to, receiving data from,and processing data generated by the location sharing client application104. This data may include, geolocation information, message content,client device information, media annotation and overlays, messagecontent persistence conditions, social network information, and liveevent information, as examples. Data exchanges within the locationsharing system 100 are invoked and controlled through functionsavailable via user interfaces (UIs) of the location sharing clientapplication 104.

Turning now specifically to the location sharing server system 108, anApplication Program Interface (API) server 110 is coupled to, andprovides a programmatic interface to, an application server 112. Theapplication server 112 is communicatively coupled to a database server118, which facilitates access to a database 120 in which is stored dataassociated with messages processed by the application server 112.

The Application Program Interface (API) server 110 receives andtransmits message data (e.g., commands and message payloads) between theclient device 102 and the application server 112. Specifically, theApplication Program Interface (API) server 110 provides a set ofinterfaces (e.g., methods and protocols) that can be called or queriedby the location sharing client application 104 in order to invokefunctionality of the application server 112. The Application ProgramInterface (API) server 110 exposes various functions supported by theapplication server 112, including account registration, loginfunctionality, the sending of messages, via the application server 112,from a particular location sharing client application 104 to anotherlocation sharing client application 104, the sending of media files(e.g., images or video) from a location sharing client application 104to the location sharing server application 114, and for possible accessby another location sharing client application 104, the setting of acollection of media data (e.g., story), the retrieval of a list offriends of a user of a client device 102, the retrieval of suchcollections, the retrieval of messages and content, the adding anddeletion of friends to a social graph, the location of friends within asocial graph, and opening an application event (e.g., relating to thelocation sharing client application 104).

The application server 112 hosts a number of applications andsubsystems, including a location sharing server application 114, amessaging server application 116, a social network system 122, and acollision detection system 124.

Examples of functions and services supported by the location sharingserver application 114 include generating a map GUI. In someembodiments, the map GUI may include representations of at leastapproximate respective positions of a user and a user's friends in asocial network graph accessed by the social media application usingavatars for each respective user.

The location sharing server application 114 may receive userauthorization to use, or refrain from using, the user's locationinformation. In some embodiments, the location sharing serverapplication 114 may likewise opt to share or not share the user'slocation with others via the map GUI. In some cases, the user's avatarmay be displayed to the user on the display screen of the user'scomputing device regardless of whether the user is sharing his or herlocation with other users.

In some embodiments, a user can select groups of other users to whichhis/her location will be displayed and may in specify different displayattributes for the different respective groups or for differentrespective individuals. In one example, audience options include: “BestFriends,” “Friends,” and “Custom” (which is an individual-levelwhitelist of people). In this example, if “Friends” are selected, allnew people added to the user's friends list will automatically be ableto see their location. If they are already sharing with the user, theiravatars will appear on the user's map.

In some embodiments, when viewing the map GUI, the user is able to seethe location of all his/her friends that have shared their location withthe user on the map, each friend represented by their respective avatar.In some embodiments, if the friend does not have an avatar, the friendmay be represented using a profile picture or a default icon displayedat the corresponding location for the friend.

In some embodiments, the user can select between friends on the map viaa menu, such as a carousel. In some embodiments, selecting a particularfriend automatically centers the map view on the avatar of that friend.Embodiments of the present disclosure may also allow the user to take avariety of actions with the user's friends from within the map GUI. Forexample, the system may allow the user to chat with the user's friendswithout leaving the map. In one particular example, the user may selecta chat icon from a menu presented in conjunction with the map GUI toinitiate a chat session.

The messaging server application 116 implements a number of messageprocessing technologies and functions, particularly related to theaggregation and other processing of content (e.g., textual andmultimedia content) included in messages received from multipleinstances of the location sharing client application 104. As will bedescribed in further detail, the text and media content from multiplesources may be aggregated into collections of content (e.g., calledstories or galleries). These collections are then made available, by thelocation sharing server application 114, to the location sharing clientapplication 104. Other processor and memory intensive processing of datamay also be performed server-side by the location sharing serverapplication 114, in view of the hardware requirements for suchprocessing.

The application server 112 is communicatively coupled to a databaseserver 118, which facilitates access to a database 120 in which isstored data processed by the location sharing server application 114.

The social network system 122 supports various social networkingfunctions services and makes these functions and services available tothe location sharing server application 114. To this end, the socialnetwork system 122 maintains and accesses an entity graph 304 (as shownin FIG. 3 ) within the database 120. Examples of functions and servicessupported by the social network system 122 include the identification ofother users of the location sharing system 100 with which a particularuser has relationships or is “following”, and also the identification ofother entities and interests of a particular user.

The collision detection system 124 supports a collision detectionfunctionality and makes this function available to the location sharingserver application 114. The collision detection system 124 receivescollision signatures from client devices and correlates the collisionsignatures received to identify pairs of collision signaturescorresponding to a same physical collision.

FIG. 2 is block diagram illustrating further details regarding themessaging system 200, according to example embodiments. Specifically,the messaging system 200 includes the messaging server application 116and the messaging client application 126, which in turn embody a numberof subsystems, namely an ephemeral timer system 202, a collectionmanagement system 204, and an annotation system 206.

The ephemeral timer system 202 is responsible for enforcing thetemporary access to content permitted by the messaging clientapplication 126 and the location sharing server application 114. To thisend, the ephemeral timer system 202 incorporates a number of timersthat, based on duration and display parameters associated with amessage, or collection of messages (e.g., a story), selectively displayand enable access to messages and associated content via the messagingclient application 126. Further details regarding the operation of theephemeral timer system 202 are provided below.

The collection management system 204 is responsible for managingcollections of media (e.g., collections of text, image video and audiodata). In some examples, a collection of content (e.g., messages,including images, video, text and audio) may be organized into an “eventgallery” or an “event story.” Such a collection may be made availablefor a specified time period, such as the duration of an event to whichthe content relates. For example, content relating to a music concertmay be made available as a “story” for the duration of that musicconcert. The collection management system 204 may also be responsiblefor publishing an icon that provides notification of the existence of aparticular collection to the user interface of the messaging clientapplication 126.

The collection management system 204 furthermore includes a curationinterface 208 that allows a collection manager to manage and curate aparticular collection of content. For example, the curation interface208 enables an event organizer to curate a collection of contentrelating to a specific event (e.g., delete inappropriate content orredundant messages). Additionally, the collection management system 204employs machine vision (or image recognition technology) and contentrules to automatically curate a content collection. In certainembodiments, compensation may be paid to a user for inclusion ofuser-generated content into a collection. In such cases, the curationinterface 208 operates to automatically make payments to such users forthe use of their content.

The annotation system 206 provides various functions that enable a userto annotate or otherwise modify or edit media content associated with amessage. For example, the annotation system 206 provides functionsrelated to the generation and publishing of media overlays for messagesprocessed by the location sharing system 100. The annotation system 206operatively supplies a media overlay or supplementation (e.g., an imagefilter) to the messaging client application 126 based on a geolocationof the client device 102. In another example, the annotation system 206operatively supplies a media overlay to the messaging client application126 based on other information, such as social network information ofthe user of the client device 102. A media overlay may include audio andvisual content and visual effects. Examples of audio and visual contentinclude pictures, texts, logos, animations, and sound effects. Anexample of a visual effect includes color overlaying. The audio andvisual content or the visual effects can be applied to a media contentitem (e.g., a photo) at the client device 102. For example, the mediaoverlay may include text that can be overlaid on top of a photographtaken by the client device 102. In another example, the media overlayincludes an identification of a location overlay (e.g., Venice beach), aname of a live event, or a name of a merchant overlay (e.g., BeachCoffee House). In another example, the annotation system 206 uses thegeolocation of the client device 102 to identify a media overlay thatincludes the name of a merchant at the geolocation of the client device102. The media overlay may include other indicia associated with themerchant. The media overlays may be stored in the database 120 andaccessed through the database server 118.

In one example embodiment, the annotation system 206 provides auser-based publication platform that enables users to select ageolocation on a map and upload content associated with the selectedgeolocation. The user may also specify circumstances under which aparticular media overlay should be offered to other users. Theannotation system 206 generates a media overlay that includes theuploaded content and associates the uploaded content with the selectedgeolocation.

In another example embodiment, the annotation system 206 provides amerchant-based publication platform that enables merchants to select aparticular media overlay associated with a geolocation via a biddingprocess. For example, the annotation system 206 associates the mediaoverlay of a highest bidding merchant with a corresponding geolocationfor a predefined amount of time.

FIG. 3 is a schematic diagram illustrating data structures 300 which maybe stored in the database 120 of the location sharing server system 108,according to certain example embodiments. While the content of thedatabase 120 is shown to comprise a number of tables, it will beappreciated that the data could be stored in other types of datastructures (e.g., as an object-oriented database).

The database 120 includes message data stored within a message table310. An entity table 302 stores entity data, including an entity graph304. Entities for which records are maintained within the entity table302 may include individuals (e.g., users), corporate entities,organizations, objects, places, events, etc. Regardless of type, anyentity regarding which the location sharing server system 108 storesdata may be a recognized entity. Each entity is provided with a uniqueidentifier, as well as an entity type identifier (not shown). The entitygraph 304 furthermore stores information regarding relationships andassociations between entities. Such relationships may be social,professional (e.g., work at a common corporation or organization)interested-based or activity-based, merely for example. A location table306 stores location data of users (e.g., geolocation informationdetermined by a GPS unit of the client device (e.g., client device102)). A threshold table 308 may store threshold values for the clientdevices. Various thresholds (e.g., detection threshold, time threshold,distance threshold) are used to detect collisions between clientdevices, and the values of the different threshold may be temporallychanges for a specific pair of client devices in certain circumstances.

Turning now to FIG. 4 , there is shown a diagrammatic representation ofa processing environment 400, which includes at least a processor 402(e.g., a GPU, CPU or combination thereof).

The processor 402 is shown to be coupled to a power source 404, and toinclude (either permanently configured or temporarily instantiated)modules, namely a correlation component 406, a threshold adjustmentcomponent 408 and a detection component 410. The correlation component406 correlates collision signatures to identify pairs of collisionsignatures corresponding to a same physical collision. The thresholdadjustment component 408 adjusts various threshold for detecting acollision. The detection component 410 detects a collision between twoclient devices based on determining that the correlation of thecollision signatures received from the two client devices achieves adetection threshold.

FIG. 5 is a schematic diagram illustrating an access-limiting process500, in terms of which access to content (e.g., an ephemeral message502, and associated multimedia payload of data) or a content collection(e.g., an ephemeral message group 506) may be time-limited (e.g., madeephemeral).

An ephemeral message 502 is shown to be associated with a messageduration parameter 508, the value of which determines an amount of timethat the ephemeral message 502 will be displayed to a receiving user ofthe ephemeral message 502 by the location sharing client application104. In one embodiment, an ephemeral message 502 is viewable by areceiving user for up to a maximum of 10 seconds, depending on theamount of time that the sending user specifies using the messageduration parameter 508.

The message duration parameter 508 and the message receiver identifier518 are shown to be inputs to a message timer 514, which is responsiblefor determining the amount of time that the ephemeral message 502 isshown to a particular receiving user identified by the message receiveridentifier 518. In particular, the ephemeral message 502 will only beshown to the relevant receiving user for a time period determined by thevalue of the message duration parameter 508. The message timer 514 isshown to provide output to a more generalized ephemeral timer system504, which is responsible for the overall timing of display of content(e.g., an ephemeral message 502) to a receiving user.

The ephemeral message 502 is shown in FIG. 5 to be included within anephemeral message group 506 (e.g., a collection of messages in apersonal story, or an event story). The ephemeral message group 506 hasan associated group duration parameter 510, a value of which determinesa time-duration for which the ephemeral message group 506 is presentedand accessible to users of the location sharing system 100. The groupduration parameter 510, for example, may be the duration of a musicconcert, where the ephemeral message group 506 is a collection ofcontent pertaining to that concert. Alternatively, a user (either theowning user or a curator user) may specify the value for the groupduration parameter 510 when performing the setup and creation of theephemeral message group 506.

Additionally, each ephemeral message 502 within the ephemeral messagegroup 506 has an associated group participation parameter 512, a valueof which determines the duration of time for which the ephemeral message502 will be accessible within the context of the ephemeral message group506. Accordingly, a particular ephemeral message group 506 may “expire”and become inaccessible within the context of the ephemeral messagegroup 506, prior to the ephemeral message group 506 itself expiring interms of the group duration parameter 510. The group duration parameter510, group participation parameter 512, and message receiver identifier518 each provide input to a group timer 516, which operationallydetermines, firstly, whether a particular ephemeral message 502 of theephemeral message group 506 will be displayed to a particular receivinguser and, if so, for how long. Note that the ephemeral message group 506is also aware of the identity of the particular receiving user as aresult of the message receiver identifier 518.

Accordingly, the group timer 516 operationally controls the overalllifespan of an associated ephemeral message group 506, as well as anindividual ephemeral message 502 included in the ephemeral message group506. In one embodiment, each and every ephemeral message 502 within theephemeral message group 506 remains viewable and accessible for atime-period specified by the group duration parameter 510. In a furtherembodiment, a certain ephemeral message 502 may expire, within thecontext of ephemeral message group 506, based on a group participationparameter 512. Note that a message duration parameter 508 may stilldetermine the duration of time for which a particular ephemeral message502 is displayed to a receiving user, even within the context of theephemeral message group 506. Accordingly, the message duration parameter508 determines the duration of time that a particular ephemeral message502 is displayed to a receiving user, regardless of whether thereceiving user is viewing that ephemeral message 502 inside or outsidethe context of an ephemeral message group 506.

The ephemeral timer system 504 may furthermore operationally remove aparticular ephemeral message 502 from the ephemeral message group 506based on a determination that it has exceeded an associated groupparticipation parameter 512. For example, when a sending user hasestablished a group participation parameter 512 of 24 hours fromposting, the ephemeral timer system 504 will remove the relevantephemeral message 502 from the ephemeral message group 506 after thespecified 24 hours. The ephemeral timer system 504 also operates toremove an ephemeral message group 506 either when the groupparticipation parameter 512 for each and every ephemeral message 502within the ephemeral message group 506 has expired, or when theephemeral message group 506 itself has expired in terms of the groupduration parameter 510.

In certain use cases, a creator of a particular ephemeral message group506 may specify an indefinite group duration parameter 510. In thiscase, the expiration of the group participation parameter 512 for thelast remaining ephemeral message 502 within the ephemeral message group506 will determine when the ephemeral message group 506 itself expires.In this case, a new ephemeral message 502, added to the ephemeralmessage group 506, with a new group participation parameter 512,effectively extends the life of an ephemeral message group 506 to equalthe value of the group participation parameter 512.

Responsive to the ephemeral timer system 504 determining that anephemeral message group 506 has expired (e.g., is no longer accessible),the ephemeral timer system 504 communicates with the location sharingsystem 100 (and, for example, specifically the location sharing clientapplication 104) to cause an indicium (e.g., an icon) associated withthe relevant ephemeral message group 506 to no longer be displayedwithin a user interface of the location sharing client application 104.Similarly, when the ephemeral timer system 202 determines that themessage duration parameter 508 for a particular ephemeral message 502has expired, the ephemeral timer system 504 causes the location sharingclient application 104 to no longer display an indicium (e.g., an iconor textual identification) associated with the ephemeral message 502.

FIG. 6 is a block diagram 600 illustrating a software architecture 604,which can be installed on any one or more of the devices describedherein. The software architecture 604 is supported by hardware such as amachine 602 that includes processors 620, memory 626, and I/O components638. In this example, the software architecture 604 can beconceptualized as a stack of layers, where each layer provides aparticular functionality. The software architecture 604 includes layerssuch as an operating system 612, libraries 610, frameworks 608, andapplications 606. Operationally, the applications 606 invoke API calls650 through the software stack and receive messages 652 in response tothe API calls 650.

The operating system 612 manages hardware resources and provides commonservices. The operating system 612 includes, for example, a kernel 614,services 616, and drivers 622. The kernel 614 acts as an abstractionlayer between the hardware and the other software layers. For example,the kernel 614 provides memory management, processor management (e.g.,scheduling), component management, networking, and security settings,among other functionality. The services 616 can provide other commonservices for the other software layers. The drivers 622 are responsiblefor controlling or interfacing with the underlying hardware. Forinstance, the drivers 622 can include display drivers, camera drivers,BLUETOOTH® or BLUETOOTH® Low Energy drivers, flash memory drivers,serial communication drivers (e.g., Universal Serial Bus (USB) drivers),WI-FI® drivers, audio drivers, power management drivers, and so forth.

The libraries 610 provide a low-level common infrastructure used by theapplications 606. The libraries 610 can include system libraries 618(e.g., C standard library) that provide functions such as memoryallocation functions, string manipulation functions, mathematicfunctions, and the like. In addition, the libraries 610 can include APIlibraries 624 such as media libraries (e.g., libraries to supportpresentation and manipulation of various media formats such as MovingPicture Experts Group-4 (MPEG4), Advanced Video Coding (H.264 or AVC),Moving Picture Experts Group Layer-3 (MP3), Advanced Audio Coding (AAC),Adaptive Multi-Rate (AMR) audio codec, Joint Photographic Experts Group(JPEG or JPG), or Portable Network Graphics (PNG)), graphics libraries(e.g., an OpenGL framework used to render in two dimensions (2D) andthree dimensions (3D) in a graphic content on a display), databaselibraries (e.g., SQLite to provide various relational databasefunctions), web libraries (e.g., WebKit to provide web browsingfunctionality), and the like. The libraries 610 can also include a widevariety of other libraries 628 to provide many other APIs to theapplications 606.

The frameworks 608 provide a high-level common infrastructure that isused by the applications 606. For example, the frameworks 608 providevarious graphical user interface (GUI) functions, high-level resourcemanagement, and high-level location services. The frameworks 608 canprovide a broad spectrum of other APIs that can be used by theapplications 606, some of which may be specific to a particularoperating system or platform.

In an example embodiment, the applications 606 may include a homeapplication 636, a contacts application 630, a browser application 632,a book reader application 634, a location application 642, a mediaapplication 644, a messaging application 646, a game application 648,and a broad assortment of other applications such as third-partyapplications 640. The applications 606 are programs that executefunctions defined in the programs. Various programming languages can beemployed to create one or more of the applications 606, structured in avariety of manners, such as object-oriented programming languages (e.g.,Objective-C, Java, or C++) or procedural programming languages (e.g., Cor assembly language). In a specific example, the third-partyapplications 640 (e.g., applications developed using the ANDROID™ orIOS™ software development kit (SDK) by an entity other than the vendorof the particular platform) may be mobile software running on a mobileoperating system such as IOS™, ANDROID™, WINDOWS® Phone, or anothermobile operating system. In this example, the third-party applications640 can invoke the API calls 650 provided by the operating system 612 tofacilitate functionality described herein.

FIG. 7 is a diagrammatic representation of a machine 700 within whichinstructions 708 (e.g., software, a program, an application, an applet,an app, or other executable code) for causing the machine 700 to performany one or more of the methodologies discussed herein may be executed.For example, the instructions 708 may cause the machine 700 to executeany one or more of the methods described herein. The instructions 708transform the general, non-programmed machine 700 into a particularmachine 700 programmed to carry out the described and illustratedfunctions in the manner described. The machine 700 may operate as astandalone device or may be coupled (e.g., networked) to other machines.In a networked deployment, the machine 700 may operate in the capacityof a server machine or a client machine in a server-client networkenvironment, or as a peer machine in a peer-to-peer (or distributed)network environment. The machine 700 may comprise, but not be limitedto, a server computer, a client computer, a personal computer (PC), atablet computer, a laptop computer, a netbook, a set-top box (STB), aPDA, an entertainment media system, a cellular telephone, a smart phone,a mobile device, a wearable device (e.g., a smart watch), a smart homedevice (e.g., a smart appliance), other smart devices, a web appliance,a network router, a network switch, a network bridge, or any machinecapable of executing the instructions 708, sequentially or otherwise,that specify actions to be taken by the machine 700. Further, while onlya single machine 700 is illustrated, the term “machine” shall also betaken to include a collection of machines that individually or jointlyexecute the instructions 708 to perform any one or more of themethodologies discussed herein.

The machine 700 may include processors 702, memory 704, and I/Ocomponents 744, which may be configured to communicate with each othervia a bus 746. In an example embodiment, the processors 702 (e.g., aCentral Processing Unit (CPU), a Reduced Instruction Set Computing(RISC) processor, a Complex Instruction Set Computing (CISC) processor,a Graphics Processing Unit (GPU), a Digital Signal Processor (DSP), anASIC, a Radio-Frequency Integrated Circuit (RFIC), another processor, orany suitable combination thereof) may include, for example, a processor706 and a processor 710 that execute the instructions 708. The term“processor” is intended to include multi-core processors that maycomprise two or more independent processors (sometimes referred to as“cores”) that may execute instructions contemporaneously. Although FIG.7 shows multiple processors 702, the machine 700 may include a singleprocessor with a single core, a single processor with multiple cores(e.g., a multi-core processor), multiple processors with a single core,multiple processors with multiples cores, or any combination thereof.

The memory 704 includes a main memory 712, a static memory 714, and astorage unit 716, both accessible to the processors 702 via the bus 746.The main memory 704, the static memory 714, and storage unit 716 storethe instructions 708 embodying any one or more of the methodologies orfunctions described herein. The instructions 708 may also reside,completely or partially, within the main memory 712, within the staticmemory 714, within machine-readable medium 718 within the storage unit716, within at least one of the processors 702 (e.g., within theprocessor's cache memory), or any suitable combination thereof, duringexecution thereof by the machine 700.

The I/O components 744 may include a wide variety of components toreceive input, provide output, produce output, transmit information,exchange information, capture measurements, and so on. The specific I/Ocomponents 744 that are included in a particular machine will depend onthe type of machine. For example, portable machines such as mobilephones may include a touch input device or other such input mechanisms,while a headless server machine will likely not include such a touchinput device. It will be appreciated that the I/O components 744 mayinclude many other components that are not shown in FIG. 7 . In variousexample embodiments, the I/O components 744 may include outputcomponents 728 and input components 730. The output components 728 mayinclude visual components (e.g., a display such as a plasma displaypanel (PDP), a light emitting diode (LED) display, a liquid crystaldisplay (LCD), a projector, or a cathode ray tube (CRT)), acousticcomponents (e.g., speakers), haptic components (e.g., a vibratory motor,resistance mechanisms), other signal generators, and so forth. The inputcomponents 730 may include alphanumeric input components (e.g., akeyboard, a touch screen configured to receive alphanumeric input, aphoto-optical keyboard, or other alphanumeric input components),point-based input components (e.g., a mouse, a touchpad, a trackball, ajoystick, a motion sensor, or another pointing instrument), tactileinput components (e.g., a physical button, a touch screen that provideslocation and/or force of touches or touch gestures, or other tactileinput components), audio input components (e.g., a microphone), and thelike.

In embodiments, the I/O components 744 include a pressure component 736(e.g., a barometer).

In further example embodiments, the I/O components 744 may furtherinclude biometric components 732, motion components 734, environmentalcomponents 738, or position components 740, among a wide array of othercomponents. For example, the biometric components 732 include componentsto detect expressions (e.g., hand expressions, facial expressions, vocalexpressions, body gestures, or eye tracking), measure biosignals (e.g.,blood pressure, heart rate, body temperature, perspiration, or brainwaves), identify a person (e.g., voice identification, retinalidentification, facial identification, fingerprint identification, orelectroencephalogram-based identification), and the like. The motioncomponents 734 include acceleration sensor components (e.g.,accelerometer), gravitation sensor components, rotation sensorcomponents (e.g., gyroscope), and so forth. The environmental components738 include, for example, illumination sensor components (e.g.,photometer), temperature sensor components (e.g., one or morethermometers that detect ambient temperature), humidity sensorcomponents, acoustic sensor components (e.g., one or more microphonesthat detect background noise), proximity sensor components (e.g.,infrared sensors that detect nearby objects), gas sensors (e.g., gasdetection sensors to detection concentrations of hazardous gases forsafety or to measure pollutants in the atmosphere), or other componentsthat may provide indications, measurements, or signals corresponding toa surrounding physical environment. The position components 740 includelocation sensor components (e.g., a GPS receiver component), altitudesensor components (e.g., altimeters or barometers that detect airpressure from which altitude may be derived), orientation sensorcomponents (e.g., magnetometers), and the like.

Communication may be implemented using a wide variety of technologies.The I/O components 744 further include communication components 742operable to couple the machine 700 to a network 720 or devices 722 via acoupling 724 and a coupling 726, respectively. For example, thecommunication components 742 may include a network interface componentor another suitable device to interface with the network 720. In furtherexamples, the communication components 742 may include wiredcommunication components, wireless communication components, cellularcommunication components, Near Field Communication (NFC) components,Bluetooth® components (e.g., Bluetooth® Low Energy), Wi-Fi® components,and other communication components to provide communication via othermodalities. The devices 722 may be another machine or any of a widevariety of peripheral devices (e.g., a peripheral device coupled via aUSB).

Moreover, the communication components 742 may detect identifiers orinclude components operable to detect identifiers. For example, thecommunication components 742 may include Radio Frequency Identification(RFID) tag reader components, NFC smart tag detection components,optical reader components (e.g., an optical sensor to detectone-dimensional bar codes such as Universal Product Code (UPC) bar code,multi-dimensional bar codes such as Quick Response (QR) code, Azteccode, Data Matrix, Dataglyph, MaxiCode, PDF417, Ultra Code, UCC RSS-2Dbar code, and other optical codes), or acoustic detection components(e.g., microphones to identify tagged audio signals). In addition, avariety of information may be derived via the communication components742, such as location via Internet Protocol (IP) geolocation, locationvia Wi-Fi® signal triangulation, location via detecting an NFC beaconsignal that may indicate a particular location, and so forth.

The various memories (e.g., memory 704, main memory 712, static memory714, and/or memory of the processors 702) and/or storage unit 716 maystore one or more sets of instructions and data structures (e.g.,software) embodying or used by any one or more of the methodologies orfunctions described herein. These instructions (e.g., the instructions708), when executed by processors 702, cause various operations toimplement the disclosed embodiments.

The instructions 708 may be transmitted or received over the network720, using a transmission medium, via a network interface device (e.g.,a network interface component included in the communication components742) and using any one of a number of well-known transfer protocols(e.g., hypertext transfer protocol (HTTP)). Similarly, the instructions708 may be transmitted or received using a transmission medium via thecoupling 726 (e.g., a peer-to-peer coupling) to the devices 722.

FIG. 8 is a flowchart illustrating a method 800 for detecting a physicalcollision between two client devices. The method 800 may be embodied incomputer-readable instructions for execution by one or more processors(e.g., processor 402) such that the steps of the method 800 may beperformed in part or in whole by functional components (e.g.,correlation component 406, threshold adjustment component 408, detectioncomponent 410) of a processing environment 400 of a system (e.g.,application server 112); accordingly, the method 800 is described belowby way of example with reference thereto. However, it shall beappreciated that the method 800 may be deployed on various otherhardware configurations and is not intended to be limited to thefunctional components of the processing environment 400.

Prior to block 802, the server computer might need to receive anauthorization from each of the users to perform an action in response todetecting a collision between the user's phone and another user's phone,such as initiating a communication session between the two phones,transferring data from the user's phone to another user's phone,receiving data from another user's phone, and sending an electroniccommunication to a third user.

In block 802, the server computer (e.g., application server 112)receives, from a first client device, an electronic communicationcomprising a first collision signature, and, from a second clientdevice, an electronic communication comprising a second collisionsignature. In some embodiments, each collision signature includes atimestamp, a location, and a sequence of acceleration instant valuesacquired by an accelerometer of the client device. In some embodiments,as described in more details in relation to FIG. 14 , the client devicegenerates a collision signature upon detecting an abrupt change ofacceleration corresponding to a light blow or a jolting collision.

In block 804, the server computer correlates the first collisionsignature and the second collision signature. The correlation may betemporal (as described in relation to FIG. 9 ), spatial (as described inrelation to FIG. 10 ), spatio-temporal (as described in relation to FIG.11 ) or based on any other correlation method.

In decision block 806, the server computer determines whether thecorrelation of the first and second collision signatures achieves thedetection threshold. In some embodiments, the correlation of the firstand second collision signatures achieves the detection threshold when adistance between the location of the first collision signature and thelocation of the second collision signature is below a distancethreshold, and a timespan between the timestamp of the first collisionsignature and the timestamp of the second collision signature is below atime threshold.

If the correlation of the first and second collision signatures achievesthe detection threshold, the method goes to block 818, and the servercomputer detects a collision between the first and second clientdevices.

If the correlation of the first and second collision signatures does notachieve the detection threshold, the method goes to block 808, and theserver computer lowers, for a limited period of time (e.g., 5 seconds),the detection threshold associated with the pair of client devicesincluding the first and second client devices. The detection thresholdis initially set at a first value. Upon receiving the first and secondcollision signatures and determining that the correlation of the firstand second collision signatures does not achieve the first value of thedetection threshold, the detection threshold is lowered to a secondvalue for the limited period of time. The server computer stores thesecond value of the lowered detection threshold in the threshold table308 together with identifiers of the first and second client devices andwith a period of time during with the detection threshold will belowered for the specific pair of client devices. In some embodiments,the detection threshold is only lowered upon determining that thecorrelation of the first and second collision signatures although notachieving the detection threshold, still achieves a lower threshold notsufficient to establish with sufficient certainty that the first andsecond signatures correspond to the same physical collision butsufficient to determine that the first and second signatures are likelyto correspond to the same physical collision. In some embodiments,lowering the detection threshold comprises increasing the distancethreshold and/or increasing the time threshold.

In block 810, the server computer receives, within the limited period oftime, a third collision signature from the first client device, and afourth collision signature from the second client device.

In block 812, the server computer correlates the third collisionsignature and the fourth collision signature. The correlation may betemporal (as described in relation to FIG. 9 ), spatial (as described inrelation to FIG. 10 ), spatio-temporal (as described in relation to FIG.11 , or based on any other correlation method.

In decision block 814, the server computer determines whether thecorrelation of the third and fourth collision signatures achieves thelowered detection threshold associated with the pair of client devices(which is temporarily set at the lower second value).

If the correlation of the third and fourth collision signatures achievesthe detection threshold associated with the pair of client devices(which is temporarily set at a lower second value), the method goes toblock 818, and the server computer detects a collision between the firstand second client devices. Detecting a collision between the first andsecond client devices may include generating an identifier indicatingthat a collision between the first and second client devices occurredand/or storing a record of a collision between the first and secondclient devices.

If the correlation of the third and fourth collision signatures does notachieve the detection threshold associated with the pair of clientdevices (which is temporarily set at a lower second value), the methodgoes to closing loop block 816, and the server computer determines thatthe third and fourth signatures do not correspond to a collision betweenthe first and second client devices. The third and fourth collisionsignatures may still be independently matched with other signatures.

In some embodiments, the server computer spatially correlates thecollision signatures to identify two collision signatures correspondingto the same physical collision. Each collision signature includes atimestamp corresponding to the acquisition time of the acceleration databy the client device. Correlating two collision signatures includescomputing a timespan between the timestamps of the two collisionsignatures.

As shown in FIG. 9 , the method 800 may further include a decision block902, a block 904, and decision block 906 according to some embodiments.Consistent with some embodiments, decision block 902 may be performed aspart (e.g., as sub-blocks or as a sub-method) of decision block 806,where the system determines whether the correlation of the first andsecond collision signature achieve the detection threshold. Consistentwith some embodiments, block 904 may be performed as part (e.g., assub-blocks or as a sub-method) of block 808, where the system lowers thedetection threshold for a limited period of time. Consistent with someembodiments, decision block 906 may be performed as part (e.g., assub-blocks or as a sub-method) of decision block 814, where the systemdetermines whether the correlation of the third and fourth collisionsignature achieve the lowered detection threshold.

In decision block 902, the server computer computes a timespan betweenthe timestamp of the first collision signature and the timestamp of thesecond collision signature and determines whether the timespan betweenthe timestamp of the first collision signature and the timestamp of thesecond collision signature is below a time threshold. If the timespanbetween the timestamp of the first collision signature and the timestampof the second collision signature is below the time threshold, theserver computer goes to block 818 and detects a collision between thefirst and second client devices. If the timespan between the timestampof the first collision signature and the timestamp of the secondcollision signature is above the time threshold, the method goes toblock 904 and increases the time threshold associated with the pair ofclient devices for a limited period of time (e.g., 5 seconds).

In decision block 906, the server computer determines whether a timespanbetween the timestamp of the third collision signature and the timestampof the fourth collision signature is below the time threshold associatedwith the pair of client devices (which is temporarily set at the highervalue). If the timespan between the timestamp of the third collisionsignature and the timestamp of the fourth collision signature is belowthe time threshold associated with the pair of client devices (which istemporarily set at the higher value), the method goes to block 818, andthe server computer detects a collision between the first and the secondclient devices. If the second timespan between the timestamp of thethird collision signature and the timestamp of the fourth collisionsignature is the time threshold associated with the pair of clientdevices (which is temporarily set at the higher value), the method goesto closing loop block 816, and the server computer determines that thethird and fourth collision signatures do not correspond to a collisionbetween the first and second client devices.

In some embodiments, the server computer spatially correlates thecollision signatures to identify two collision signatures correspondingto the same physical collision. Each collision signature includes alocation corresponding to the location of the client device when theclient device acquired the acceleration data. Correlating two collisionsignatures includes computing a distance between the locations of thetwo collision signatures. The location of the client device includes alatitude, a longitude and in some embodiments, an altitude.

As shown in FIG. 10 , the method 800 may further include a decisionblock 1002, a block 1004, and decision block 1006 according to someembodiments. Consistent with some embodiments, decision block 1002 maybe performed as part (e.g., as sub-blocks or as a sub-method) ofdecision block 806, where the system determines whether the correlationof the first and second collision signature achieve the detectionthreshold. Consistent with some embodiments, block 1004 may be performedas part (e.g., as sub-blocks or as a sub-method) of block 808, where thesystem lowers the detection threshold for a limited period of time.Consistent with some embodiments, decision block 1006 may be performedas part (e.g., as sub-blocks or as a sub-method) of decision block 814,where the system determines whether the correlation of the third andfourth collision signature achieve the lowered detection threshold.

In decision block 1002, the server computer computes a distance betweenthe location of the first collision signature and the location of thesecond collision signature and determines whether the distance betweenthe location of the first collision signature and the location of thesecond collision signature is below a distance threshold associated withthe pair of client devices. In response to determining that the distancebetween the location of the first collision signature and the locationof the second collision signature is below the distance thresholdassociated with the pair of client devices, the server computer goes toblock 816 and detects a collision between the first and second clientdevices. Upon receiving the first and second collision signatures anddetermining that the distance between the location of the firstcollision signature and the location of the second collision signatureis above the distance threshold associated with the pair of clientdevices, the server computer goes to block 1004 and increases thedistance threshold associated with the pair of client devices for alimited period of time (e.g., 5 seconds).

In decision block 1006, the server computer determines whether adistance between the location of the third collision signature and thelocation of the fourth collision signature is below the distancethreshold associated with the pair of client devices (which istemporarily set at the higher value). In response to determining thatthe distance between the location of the third collision signature andthe location of the fourth collision signature is below the distancethreshold associated with the pair of client devices (which istemporarily set at the higher value), the server computer detects acollision between the first and the second client devices via the servercomputer. If the distance between the location of the third collisionsignature and the location of the fourth collision signature is abovethe distance threshold associated with the pair of client devices (whichis temporarily set at the higher value), the method goes to closing loopblock 816, and the server computer determines that the third and fourthcollision signatures do not correspond to a collision between the firstand second client devices.

In some embodiments, the server computer spatio-temporally correlatesthe collision signatures to identify two collision signaturescorresponding to the same physical collision. The server computer cancorrelate the collision signatures based on distance first and thenbased on time. However, correlating the collision signatures based ontime first and then based on distance is more efficient in terms ofcomputation time. Each collision signature includes a timestampcorresponding to the acquisition time of the acceleration data by theclient device and a location corresponding to the location of the clientdevice when the client device acquired the acceleration data.Correlating two collision signatures includes computing a distancebetween the locations of the two collision signatures and computing atimespan between the timestamps of the two collision signatures.

As shown in FIG. 11 , the method 800 may include decision block 902,block 904, decision block 906, and decision block 1002, block 1004, anddecision block 1006 according to some embodiments. Consistent with someembodiments, decision block 902 and decision block 1002 may be performedas part (e.g., as sub-blocks or as a sub-method) of decision block 806,where the system determines whether the correlation of the first andsecond collision signature achieve the detection threshold. Consistentwith some embodiments, block 904 and block 1004 may be performed as part(e.g., as sub-blocks or as a sub-method) of block 808, where the systemlowers the detection threshold for a limited period of time. Consistentwith some embodiments, decision block 906 and decision block 1006 may beperformed as part (e.g., as sub-blocks or as a sub-method) of decisionblock 814, where the system determines whether the correlation of thethird and fourth collision signature achieve the lowered detectionthreshold.

In decision block 902, the server computer computes a timespan betweenthe timestamp of the first collision signature and the timestamp anddetermines whether the timespan is below a time threshold. If thetimespan is below the time threshold, the server computer goes todecision block 1002. If the first timespan is above the time threshold,the method goes to block 904 where the computer server increases thetime threshold for a limited period of time (e.g., 5 seconds), and block1004 where the server computer increases the distance threshold for alimited period of time (e.g., 5 seconds).

In decision block 1002, the server computer computes a distance betweenthe location of the first collision signature and the location of thesecond collision signature and determines whether the distance betweenthe location of the first collision signature and the location of thesecond signature is below a distance threshold. If the distance betweenthe location of the first collision signature and the location of thesecond collision signature is below the distance threshold, the servercomputer goes to block 818 and detects a collision between the first andsecond client devices. If the distance between the location of the firstcollision signature and the location of the second collision signatureis above the distance threshold, the method goes to block 904 where thecomputer server increases the time threshold for a limited period oftime (e.g., 5 seconds), and block 1004 where the server computerincreases the distance threshold for a limited period of time (e.g., 5seconds).

In decision block 906, the server computer determines whether a timespanbetween the timestamp of the third collision signature and the timestampof the fourth collision signature is below the increased time threshold.In response to determining that the second timespan between thetimestamp of the third collision signature and the timestamp of thefourth collision signature is below the increased time threshold, themethod goes to decision block 1006, where the server computer determineswhether a distance between the location of the third collision signatureand the location of the fourth collision signature is below theincreased distance threshold. In response to determining that thedistance between the location of the third collision signature and thelocation of the fourth collision signature is below the increaseddistance threshold, the server computer detects a collision between thefirst and the second client devices via the server computer.

GPS measurements can be affected by several types of random errors andbiases. As a consequence, the location determined by a client device canbe grossly inaccurate. To avoid false positives, in some embodiments,prior to correlating the first and second collision signatures, theserver computer discards a collision signature if the locationassociated with the collision signature is not a location at which theuser stayed within a maximum range for a minimum amount of time. Indeed,if the collision signature is not a location at which the user stayedwithin a maximum range for a minimum amount of time, the locationassociated with the collision is probably grossly inaccurate. In someembodiments, the server computer aggregates location data received froma client device overtime into one or more visit points of the user. Avisit point may be defined as a location where the user stayed within amaximum range for a minimum amount of time. The server computerdetermines whether the location included in the collision signaturecorresponds to a visit point of the user. If the location included inthe first collision signature does not correspond to a visit point ofthe user, the server computer discards the collision signature.

In some embodiments, a Discrete Global Grid (DGG) (e.g., S2 Grid System)is used to pre-filter the collision signatures. The DGG is a mosaicwhich forms a partition of the Earth's surface into a plurality ofgeographical cells. For each collision signature, the server computerdetermines a geographical cell associated with the location of thecollision signature. Correlating two collision signatures includes,prior to spatio-temporally correlating the two collision signatures,determining whether the two collision signatures are associated with thesame geographical cell or two geographical cells that are directneighbors. If the geographical cell associated with the one of thecollision signatures is not the same as the geographical cell associatedwith the other collision signature, nor a geographical cell that is adirect neighbor of the geographical cell associated with the othercollision signature, the server computer determines that the twocollision signatures do not correspond to a same collision.

FIG. 12 is a flowchart illustrating a method 1200 for detecting, at aclient device, an abrupt change of acceleration corresponding to acollision and generating a collision signature. The method 1200 may beembodied in computer-readable instructions for execution by one or moreprocessors of a machine (e.g., machine 700) such that the steps of themethod 1200 may be performed in part or in whole by functionalcomponents of a client device (e.g., client device 102); accordingly,the method 1200 is described below by way of example with referencethereto. However, it shall be appreciated that the method 1200 may bedeployed on various other hardware configurations and is not intended tobe limited to the functional components of the client device.

In block 1202, the client device acquires a sequence of data points.Each data point includes an instant acceleration, a location (e.g.,latitude, longitude, and in some embodiments altitude) and a timestamp.The instant acceleration may be acquired by an accelerometer integratedin the client device. The instant acceleration is measured along 3 axes.In some embodiments, the client device periodically acquires datapoints. The frequency of acquisition may for example be 50 Hz-100 Hz.

In block 1204, the client device computes a distance (e.g., Euclidiandistance) of the instant acceleration of each data point.

In decision block 1206, the client device determines whether the ratioof the distance of the instant acceleration of the most recentlyacquired data point to the distance of the instant acceleration of anyof the other data points of the sequence exceeds a collision threshold(e.g., 15). The collision threshold can be set from the server (e.g.,via the location sharing server application 114).

If the ratio exceeds the collision threshold (e.g., 15), the clientdevice generates, in block 1208, a collision signature, and sends, inblock 1210, the collision signature to the application server (e.g.,application server 112). The collision signature may include a locationand a timestamp associated with the most recently acquired data point.In some embodiments, the collision signature includes the sequence ofdata points acquired by the client device.

Knocking a phone against a horizontal surface, such as a table, maygenerate acceleration data similar to the acceleration data generatedwhen the phone is knocked into another phone. In some embodiments,gravity data is used to determine whether the phone collided withanother phone or with a horizontal surface.

In some embodiments, each data point further includes gravity dataacquired by a gravity sensor embedded in the client device. The gravitydata measures the acceleration effect of Earth's gravity on the clientdevice. The gravity data may be derived from the acceleration dataacquired by the accelerometer of the client device. Data acquired byother sensors of the client device (e.g. the magnetometer and thegyroscope) may be used to remove linear acceleration from theacceleration data acquired by the accelerometer. The client devicedetermines a tilt of the client device relative to the face of theEarth. If the tilt of the client device relative to the face of theEarth is less than a tilt threshold (e.g., 30 degree), the collisiondetected is likely to be a collision against a horizontal surface suchas a table as opposed to a collision against another phone, and theclient device discards the data point without generating a collisionsignature.

User interface 1300 shown in FIG. 13 is an example of a user interfacethat may be displayed on a display screen of a third user. Userinterface 1300 includes a map 1302 depicting an avatar 1304 of the firstuser, and an avatar 1306 of the second user.

An avatar (e.g., avatar 1304, avatar 1306) is a media content itemassociated with the first user and that may include a still image,animated image, video, or other content. The avatar may include aprofile picture or a default icon. The location of the user's avatar onthe map GUI is representative of the current location of the user. Thesystem updates the location of the first user's avatar on the map as thelocation of the user changes. If the system detects a collision betweenthe client device of the first user and the client device of the seconduser, the map displays a text or an icon 1308 or a combination of bothindicating that the first and second user are spending time together. Anicon is a media content item that may include a still image, animatedimage, video, or other content.

The detection of a collision between the client device of the first userand the client device of the second user can also trigger variousactions, such as sending a notification to a group of users (e.g., usersthat are friends with both the first and second users) and unlockingcertain functionalities of the application for the first and the secondusers.

Throughout this specification, plural instances may implementcomponents, operations, or structures described as a single instance.Although individual operations of one or more methods are illustratedand described as separate operations, one or more of the individualoperations may be performed concurrently, and nothing requires that theoperations be performed in the order illustrated. Structures andfunctionality presented as separate components in example configurationsmay be implemented as a combined structure or component. Similarly,structures and functionality presented as a single component may beimplemented as separate components. These and other variations,modifications, additions, and improvements fall within the scope of thesubject matter herein.

Although an overview of the inventive subject matter has been describedwith reference to specific example embodiments, various modificationsand changes may be made to these embodiments without departing from thebroader scope of embodiments of the present disclosure.

The embodiments illustrated herein are described in sufficient detail toenable those skilled in the art to practice the teachings disclosed.Other embodiments may be used and derived therefrom, such thatstructural and logical substitutions and changes may be made withoutdeparting from the scope of this disclosure. The Detailed Description,therefore, is not to be taken in a limiting sense, and the scope ofvarious embodiments is defined only by the appended claims, along withthe full range of equivalents to which such claims are entitled.

As used herein, the term “or” may be construed in either an inclusive orexclusive sense. Moreover, plural instances may be provided forresources, operations, or structures described herein as a singleinstance. Additionally, boundaries between various resources,operations, modules, engines, and data stores are somewhat arbitrary,and particular operations are illustrated in a context of specificillustrative configurations. Other allocations of functionality areenvisioned and may fall within a scope of various embodiments of thepresent disclosure. In general, structures and functionality presentedas separate resources in the example configurations may be implementedas a combined structure or resource. Similarly, structures andfunctionality presented as a single resource may be implemented asseparate resources. These and other variations, modifications,additions, and improvements fall within a scope of embodiments of thepresent disclosure as represented by the appended claims. Thespecification and drawings are, accordingly, to be regarded in anillustrative rather than a restrictive sense.

What is claimed is:
 1. A method comprising: receiving, at a servercomputer, a first collision signature from a first client device, and asecond collision signature from a second client device; determining thata first timespan between a timestamp of the first collision signatureand a timestamp of the second collision signature is below a timethreshold; increasing, based on determining that the first timespan isbelow the time threshold, the time threshold for a limited period oftime; receiving, at the server computer and within the limited period oftime, a third collision signature from the first client device, and afourth collision signature from the second client device; determiningthat a second timespan between a timestamp of the third collisionsignature and a timestamp of the fourth collision signature meets thetime threshold; and detecting, based on determining that the secondtimespan meets the time threshold, a collision associated with the firstand second client devices.
 2. The method of claim 1, wherein eachcollision signature includes a sequence of instant acceleration readingsacquired by a corresponding client device.
 3. The method of claim 1,further comprising: receiving location data from the first clientdevice; determining a plurality of visit points of the first clientdevice by aggregating the location data received from the first clientdevice; receiving location data from the second client device;determining a plurality of visit points of the second client device byaggregating the location data received from the second client device;determining that a location of the first collision signature correspondsto one of the plurality of visit points of the first client device; anddetermining that a location of the second collision signaturecorresponds to one of the plurality of visit points of the second clientdevice.
 4. The method of claim 3, further comprising: determining that alocation of the third collision signature corresponds to one of theplurality of visit points of the first client device; and determiningthat a location of the fourth collision signature corresponds to one ofthe plurality of visit points of the second client device.
 5. The methodof claim 1, further comprising: creating, in response to detecting thecollision, a communication session between the first and the secondclient devices via the server computer.
 6. The method of claim 1,wherein the first client device is associated with a first user, and thesecond client device is associated with a second user.
 7. The method ofclaim 6, further comprising: sending, in response to detecting thecollision, a notification to a third client device associated with athird user that is connected, in a social graph, with both the first andsecond users.
 8. A system comprising: a processor; and a memory storinginstructions that, when executed by the processor, configure theprocessor to perform operations comprising: receiving a first collisionsignature from a first client device, and a second collision signaturefrom a second client device; determining that a first timespan between atimestamp of the first collision signature and a timestamp of the secondcollision signature is below a time threshold; increasing, based ondetermining that the first timespan is below the time threshold, thetime threshold for a limited period of time; receiving, within thelimited period of time, a third collision signature from the firstclient device, and a fourth collision signature from the second clientdevice; determining that a second timespan between a timestamp of thethird collision signature and a timestamp of the fourth collisionsignature meets the time threshold; and detecting, based on determiningthat the second timespan meets the time threshold, a collisionassociated with the first and second client devices.
 9. The system ofclaim 8, wherein each collision signature includes a sequence of instantacceleration readings acquired by a corresponding client device.
 10. Thesystem of claim 8, the operations further comprising: receiving locationdata from the first client device; determining a plurality of visitpoints of the first client device by aggregating the location datareceived from the first client device; receiving location data from thesecond client device; determining a plurality of visit points of thesecond client device by aggregating the location data received from thesecond client device; determining that a location of the first collisionsignature corresponds to one of the plurality of visit points of thefirst client device; and determining that a location of the secondcollision signature corresponds to one of the plurality of visit pointsof the second client device.
 11. The system of claim 10, furthercomprising: determining that a location of the third collision signaturecorresponds to one of the plurality of visit points of the first clientdevice; and determining that a location of the fourth collisionsignature corresponds to one of the plurality of visit points of thesecond client device.
 12. The system of claim 8, further comprising:creating, in response to detecting the collision, a communicationsession between the first and the second client devices.
 13. The systemof claim 8, wherein the first client device is associated with a firstuser, and the second client device is associated with a second user. 14.The system of claim 13, the operations further comprising: sending, inresponse to detecting the collision, a notification to a third clientdevice associated with a third user that is connected, in a socialgraph, with both the first and second users.
 15. A non-transitorycomputer-readable storage medium, the computer-readable storage mediumincluding instructions that when executed by a computer, cause thecomputer to perform operations comprising: receiving a first collisionsignature from a first client device, and a second collision signaturefrom a second client device; determining that a first timespan between atimestamp of the first collision signature and a timestamp of the secondcollision signature is below a time threshold; increasing, based ondetermining that the first timespan is below the time threshold, thetime threshold for a limited period of time; receiving, within thelimited period of time, a third collision signature from the firstclient device, and a fourth collision signature from the second clientdevice; determining that a second timespan between a timestamp of thethird collision signature and a timestamp of the fourth collisionsignature meets the time threshold; and detecting, based on determiningthat the second timespan meets the time threshold, a collisionassociated with the first and second client devices.
 16. Thecomputer-readable storage medium of claim 15, wherein each collisionsignature includes a sequence of instant acceleration readings acquiredby a corresponding client device.
 17. The computer-readable storagemedium of claim 15, the operations further comprising: receivinglocation data from the first client device; determining a plurality ofvisit points of the first client device by aggregating the location datareceived from the first client device; receiving location data from thesecond client device; determining a plurality of visit points of thesecond client device by aggregating the location data received from thesecond client device; determining that a location of the first collisionsignature corresponds to one of the plurality of visit points of thefirst client device; and determining that a location of the secondcollision signature corresponds to one of the plurality of visit pointsof the second client device.
 18. The computer-readable storage medium ofclaim 17, further comprising: determining that a location of the thirdcollision signature corresponds to one of the plurality of visit pointsof the first client device; and determining that a location of thefourth collision signature corresponds to one of the plurality of visitpoints of the second client device.
 19. The computer-readable storagemedium of claim 18, further comprising: creating, in response todetecting the collision, a communication session between the first andthe second client devices.
 20. The computer-readable storage medium ofclaim 18, wherein the first client device is associated with a firstuser, and the second client device is associated with a second user.